package com.zuipin.util;

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.util.StringUtils;

public class DateUtils {
	
	public final static String[]					SUPPORTED_FORMATS		= { "yyyy-MM-dd", "MM/dd/yyyy HH:mm:ss", "MM-dd-yyyy HH:mm:ss", "MM-dd-yyyy hh:mm:ss a", "MM-dd-yyyy",
			"MM-dd-yy", "MM/dd/yyyy", "MM.dd.yyyy", "MM.dd.yy", "MMddyyyy", "MMddyy" };
	
	/**
	 * 日期格式1： yyyy-MM-dd
	 */
	public static final String						DATE_FORMAT1			= "yyyy-MM-dd";
	
	/**
	 * 日期格式2： yyMMdd
	 */
	public static final String						DATE_FORMAT2			= "yyMMdd";
	
	/**
	 * 日期格式3： yyyy年MM月dd日
	 */
	public static final String						DATE_FORMAT3			= " yyyy年MM月dd日";
	
	/**
	 * 日期格式4：yyyy-MM
	 */
	public static final String						DATE_FORMAT4			= "yyyy-MM";
	
	/**
	 * 日期格式5：yyyy/MM/dd HH:mm:ss
	 */
	public static final String						DATE_FORMAT5			= "yyyy/MM/dd HH:mm:ss";
	
	/**
	 * 日期格式6： yyyyMMdd
	 */
	public static final String						DATE_FORMAT6			= "yyyyMMdd";
	
	/**
	 * 日期格式7： yyyyMM
	 */
	public static final String						DATE_FORMAT7			= "yyyyMM";
	
	// ////////////////////////////////////////////////////////////////
	/**
	 * 时间格式1：HH:mm:ss
	 */
	public static final String						TIME_FORMAT1			= "HH:mm:ss";
	
	/**
	 * 时间格式2：HHmmss
	 */
	public static final String						TIME_FORMAT2			= "HHmmss";
	
	// //////////////////////////////////////////////////////////////
	/**
	 * 日期时间格式1： yyyy-MM-dd HH:mm:ss
	 */
	public static final String						DATE_TIME_FORMAT1		= "yyyy-MM-dd HH:mm:ss";
	
	/**
	 * 日期时间格式2： yyyyMMddHHmmss
	 */
	public static final String						DATE_TIME_FORMAT2		= "yyyyMMddHHmmss";
	
	/**
	 * 日期时间格式3： yyyy年MM月dd日HH时mm分ss秒
	 */
	public static final String						DATE_TIME_FORMAT3		= "yyyy年MM月dd日HH时mm分ss秒";
	
	// ////////////////////////////年、 月、 日//////////////////////////////////
	/**
	 * 年格式1： yyyy
	 */
	public static final String						YEAR_FORMAT_YYYY		= "yyyy";
	
	/**
	 * 月格式1： MM
	 */
	public static final String						Month_FORMAT_MM			= "MM";
	
	/**
	 * 日格式1：dd
	 */
	public static final String						Day_FORMAT_DD			= "dd";
	
	public static SimpleDateFormat					SHORT_DATE_FORMAT		= new SimpleDateFormat(DATE_FORMAT1);
	public static SimpleDateFormat					FULL_DATE_FORMAT		= new SimpleDateFormat(DATE_TIME_FORMAT1);
	public static SimpleDateFormat					FORMAT_STOCKPLACE_DATE	= new SimpleDateFormat("MM月dd日");
	public static long								nd						= 1000 * 24 * 60 * 60;																					// 一天的毫秒数
	public static long								nh						= 1000 * 60 * 60;																						// 一小时的毫秒数
	public static long								nm						= 1000 * 60;																							// 一分钟的毫秒数
	public static long								ns						= 1000;																									// 一秒钟的毫秒数
	private static ThreadLocal<SimpleDateFormat>	threadLocal				= new ThreadLocal<SimpleDateFormat>();
	/**
	 * 00:00:00
	 */
	public static final String						BEGIN_TIME				= " 00:00:00";
	/**
	 * 23:59:59
	 */
	public static final String						END_TIME				= " 23:59:59";
	
	/**
	 * @功能描述：获得当前日期的结束时间
	 * @作者 : cjj 陈俊杰
	 * @创建时间 : 2016年2月27日上午11:50:16
	 * @param obj
	 * @return
	 * @throws ParseException
	 */
	public static final String getEndTime(String obj) {
		return obj + END_TIME;
	}
	
	/**
	 * @功能描述：获得当前日期的结束时间
	 * @作者 : cjj 陈俊杰
	 * @创建时间 : 2016年2月27日上午11:50:16
	 * @param obj
	 * @return
	 * @throws ParseException
	 */
	public static final String getEndTime(Date obj) {
		return formatShortDate(obj) + END_TIME;
	}
	
	/***
	 * 功能描述：获得当前日期的开始时间
	 * 
	 * @author :xujinding
	 * @createdTime : 2016年6月27日下午7:27:54
	 * @return
	 */
	public static final String getStartTime(Date obj) {
		return formatShortDate(obj) + BEGIN_TIME;
	}
	
	/**
	 * 30天
	 */
	public static final int	THIRTY_DAYS	= 30;
	
	/**
	 * 1天
	 */
	public static final int	ONE_DAYS	= 1;
	
	/**
	 * 1个月
	 */
	public static final int	ONE_MONTH	= 1;
	
	public static Date getNextDay(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.add(Calendar.DAY_OF_MONTH, 1);
		date = calendar.getTime();
		return date;
	}
	
	public static String getWeek(int index) {
		String str[] = { "周日", "周一", "周二", "周三", "周四", "周五", "周六" };
		return str[index];
	}
	
	public static String getDateDiffString(Date d1, Date d2) {
		Long diff = d1.getTime() - d2.getTime();
		long day = diff / nd;
		long hour = diff % nd / nh;
		long minute = diff % nd % nh / nm;
		long second = diff % nd % nh % nm / ns;
		return "" + day + "天" + hour + "时" + minute + "分" + second + "秒";
	}
	
	public static Long getDateDiffHour(Date d1, Date d2) {
		Long diff = d1.getTime() - d2.getTime();
		long hour = diff / nh;
		return hour;
	}
	
	public static Long getDateDiffMin(Date d1, Date d2) {
		Long diff = d1.getTime() - d2.getTime();
		long min = diff % nd % nh / nm;
		return min;
	}
	
	public static Date date(int year, int month, int day) {
		return date(year, month, day, 0, 0, 0);
	}
	
	public static Date date(int year, int month, int day, int hour, int minute, int second) {
		Calendar calendar = Calendar.getInstance();
		calendar.set(year, month, day, hour, minute, second);
		calendar.set(Calendar.MILLISECOND, 0);
		return calendar.getTime();
	}
	
	public static Date add(Date date, int field, int value) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.add(field, value);
		return calendar.getTime();
	}
	
	public static Calendar calendar(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		
		return calendar;
	}
	
	public static int age(Date dateOfBirth, Date targetDate) {
		Calendar birth = calendar(dateOfBirth);
		Calendar target = calendar(targetDate);
		int age = target.get(Calendar.YEAR) - birth.get(Calendar.YEAR);
		if ((birth.get(Calendar.MONTH) > target.get(Calendar.MONTH))
				|| (birth.get(Calendar.MONTH) == target.get(Calendar.MONTH) && birth.get(Calendar.DAY_OF_MONTH) > target.get(Calendar.DAY_OF_MONTH))) {
			age--;
		}
		return age;
	}
	
	public static String format(Date date, String format) {
		if (date == null) {
			return "";
		}
		return new SimpleDateFormat(format).format(date);
	}
	
	/**
	 * @功能描述：
	 * @作者 :
	 * @创建时间 :
	 * @修改内容：格式化为yyyy-MM-dd
	 * @修改人 : cjj 陈俊杰
	 * @修改时间 : 2016年3月30日下午2:15:24
	 * @param date
	 * @return
	 */
	public static String formatShortDate(Date date) {
		return SHORT_DATE_FORMAT.format(date);
	}
	
	public static Date parseShortTime(String dateTime) throws ParseException {
		return SHORT_DATE_FORMAT.parse(dateTime);
	}
	
	/**
	 * @author: Santy
	 * @date: 2015年10月14日
	 * @param dateTime
	 * @param dateFormat
	 * @return
	 */
	public static Date parseFullTime(String dateTime) throws ParseException {
		if (StringUtil.isNotBlank(dateTime) && dateTime.length() == 10) {
			dateTime = dateTime + BEGIN_TIME;
		}
		return FULL_DATE_FORMAT.parse(dateTime);
	}
	
	public static Date parseFullTimeThread(String dateTime) throws ParseException {
		SimpleDateFormat sdf = threadLocal.get();
		if (sdf == null) {
			sdf = new SimpleDateFormat(DATE_TIME_FORMAT1);
			threadLocal.set(sdf);
		}
		return sdf.parse(dateTime);
	}
	
	/**
	 * 默认格式化， yyyy-MM-dd HH:mm:ss
	 * 
	 * @author: Santy
	 * @date: 2015年7月21日
	 * @param date
	 * @return
	 */
	public static String formatDate(Date date) {
		return FULL_DATE_FORMAT.format(date);
	}
	
	public static Date toFullDate(String text) {
		if (StringUtils.isEmpty(text)) {
			return null;
		}
		try {
			return FULL_DATE_FORMAT.parse(text);
		} catch (ParseException e) {
			return null;
		}
	}
	
	public static Date toDate(String string) {
		if (string == null) {
			return null;
		}
		string = string.trim();
		SimpleDateFormat sdf = null;
		Date one = null;
		for (String format : SUPPORTED_FORMATS) {
			sdf = new SimpleDateFormat(format);
			sdf.setLenient(false);
			try {
				one = sdf.parse(string);
				return one;
			} catch (ParseException e) {
			}
		}
		return null;
	}
	
	public static String getLastMonthFirstDay() {
		Calendar cal = Calendar.getInstance();
		Date date = new Date();
		cal.setTime(date);
		int year = 0;
		int month = cal.get(Calendar.MONTH); // 上个月月份?
		if (month == 0) {
			year = cal.get(Calendar.YEAR) - 1;
			month = 12;
		} else {
			year = cal.get(Calendar.YEAR);
		}
		String mon = "";
		if (month < 10) {
			mon = "0" + String.valueOf(month);
		} else {
			mon = String.valueOf(month);
		}
		String endDay = year + "-" + mon + "-01";
		return endDay;
	}
	
	public static String getLastMonthLastDay() {
		Calendar cal = Calendar.getInstance();
		Date date = new Date();
		cal.setTime(date);
		int year = 0;
		int month = cal.get(Calendar.MONTH); // 上个月月�?
		// int day = cal.getActualMaximum(Calendar.DAY_OF_MONTH); // 结束天数
		int day = getLastMonthDayLenth();
		if (month == 0) {
			year = cal.get(Calendar.YEAR) - 1;
			month = 12;
		} else {
			year = cal.get(Calendar.YEAR);
		}
		String endDay = year + "-" + month + "-" + day;
		return endDay;
	}
	
	public static int getLastMonthDayLenth() {
		Calendar calendar = new GregorianCalendar();
		Calendar calendar1 = new GregorianCalendar(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) - 1, 1);
		return calendar1.getActualMaximum(Calendar.DAY_OF_MONTH);
	}
	
	public static String nDaysAfterOneDateString(String basicDate, int n) {
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		Date tmpDate = null;
		try {
			tmpDate = df.parse(basicDate);
		} catch (Exception e) {
			// 日期型字符串格式错误
		}
		long nDay = (tmpDate.getTime() / (24 * 60 * 60 * 1000) + 1 + n) * (24 * 60 * 60 * 1000);
		tmpDate.setTime(nDay);
		
		return df.format(tmpDate);
	}
	
	/**
	 * @功能描述：计算时间差(单位:秒)
	 * @作者 : cjj 陈俊杰
	 * @创建时间 : 2016年5月9日下午2:11:11
	 * @param firstDay
	 * @param secondDay
	 * @return
	 */
	public static Integer DayDiff(Date firstDay, Date secondDay) {
		Long day = 60L * 60 * 24;
		Long diff = (firstDay.getTime() - secondDay.getTime()) / 1000;
		Long diffDay = diff / day;
		return diffDay.intValue();
	}
	
	/**
	 * @return
	 * @author:lining
	 * @email:lining@xiangyu.cn
	 * @创建日期:2012-8-8
	 * @功能说明：获得系统日期
	 */
	public static Date getDate() {
		return new Date(System.currentTimeMillis());
	}
	
	/**
	 * @return
	 * @author:lihh
	 * @email:lhhui@xiangyu.cn
	 * @创建日期:2012-11-15
	 * @功能说明：获取系统当前时间
	 */
	public static String getCurrentSysDate() {
		SimpleDateFormat format = getSDateFormat();
		String currentDate = format.format(new Date());
		return currentDate;
	}
	
	public static Date add(int CALENDARFIELD, int amount) {
		Calendar calendar = Calendar.getInstance();
		calendar.add(CALENDARFIELD, amount);
		return calendar.getTime();
	}
	
	/**
	 * 获取时间开销
	 * 
	 * @param t1
	 * @param t2
	 * @return
	 */
	public static long getTimeSpent(long t1, long t2) {
		
		long t3 = t2 - t1;
		long seconds = t3 / (1000);
		return seconds;
		
	}
	
	/**
	 * @param dateTime
	 * @return
	 * @author:lining
	 * @email:lining@xiangyu.cn
	 * @创建日期:2012-10-9
	 * @功能说明：获得某日固定时间
	 */
	public static Date getFixedTime(Long dateTime) {
		String date = formatDate(getDate());
		return new Date(toDate(date).getTime() + dateTime);
	}
	
	/**
	 * @param date
	 * @return
	 * @author:lining
	 * @email:lining@xiangyu.cn
	 * @创建日期:2012-9-24
	 * @功能说明：格式化
	 */
	public static String formatStockPlaceDate(Date date) {
		return FORMAT_STOCKPLACE_DATE.format(date);
	}
	
	/**
	 * @param date
	 * @return
	 * @author:lining
	 * @email:lining@xiangyu.cn
	 * @创建日期:2012-9-24
	 * @功能说明：计算时间差
	 */
	public static String getHourMin(Long date) {
		long hour = date % nd / nh;// 计算差多少小时
		long min = date % nd % nh / nm;// 计算差多少分钟
		return hour + "小时" + min + "分钟";
	}
	
	/**
	 * @param sysDate
	 * @param date
	 * @param addTime
	 * @return
	 * @author:lining
	 * @email:lining@xiangyu.cn
	 * @创建日期:2012-9-24
	 * @功能说明：获得两个日期的时间差
	 */
	public static Long getTimePoor(Date sysDate, Date date, Long addTime) {
		return getDateForZero(date, addTime).getTime() - sysDate.getTime();
	}
	
	/**
	 * @param date
	 * @param addTime
	 * @return
	 * @author:lining
	 * @email:lining@xiangyu.cn
	 * @创建日期:2012-9-24 @功能说明：获得格式化后的凌晨0.00
	 */
	public static Date getDateForZero(Date date, Long addTime) {
		return toDate(formatDate((new Date(date.getTime() + addTime))));
	}
	
	public static Date addStockPlaceTime(Date date, Long addDate) {
		return new Date(date.getTime() + addDate);
	}
	
	@SuppressWarnings("unchecked")
	public static List getTimeList(String date1, String date2) throws ParseException {
		long dayTime = 0l;
		List list = new ArrayList();
		Date beginDate = SHORT_DATE_FORMAT.parse(date1);
		Date endDate = SHORT_DATE_FORMAT.parse(date2);
		endDate = new Date(endDate.getTime() + nd);
		dayTime = (endDate.getTime() - beginDate.getTime()) / nd;
		list.add(dayTime);
		list.add(beginDate);
		list.add(endDate);
		return list;
	}
	
	public static List<String> getAllDay(String d1, String d2) {
		List<String> result = new ArrayList<String>();
		try {
			Date date1 = SHORT_DATE_FORMAT.parse(d1);
			Date date2 = SHORT_DATE_FORMAT.parse(d2);
			
			while (date1.before(date2)) {
				result.add(SHORT_DATE_FORMAT.format(date1));
				date1.setTime(date1.getTime() + 60 * 60 * 24 * 1000);
			}
			result.add(SHORT_DATE_FORMAT.format(date1));
			return result;
		} catch (Exception e1) {
			e1.printStackTrace();
		}
		return new ArrayList<String>();
	}
	
	/**
	 * 格式化指定时间并返回， @author: @date: 2015年5月10日 @param @return @throws
	 */
	public static Date getDate(String strDate, String format) {
		try {
			if (strDate == null) {
				return null;
			}
			if (format == null || "".equals(format)) {
				// 使用缺省格式
				format = DATE_FORMAT1;
			}
			return getSDateFormat(format).parse(strDate);
		} catch (ParseException e) {
			e.printStackTrace();
			throw new IllegalArgumentException("非正确的日期字符串!");
		}
	}
	
	/**
	 * 计算两个日期相差的天数，只考虑年月日，不考虑时分秒(如果加上时分秒，可能导致天数计算错误)
	 * 
	 * @param before
	 * @param end
	 * @param format
	 *            日期格式 eg:yyyyMMdd yyyy-MM-dd
	 * @return
	 * @author:lining
	 * @email:lining@xiangyu.cn
	 * @创建日期:2013-3-20
	 * @功能说明：int 相差的天数
	 */
	public static int getDateDiff(String before, String end, String format) {
		Date beforeDate = getDate(before, format);
		Date endDate = getDate(end, format);
		return getDateDiff(beforeDate, endDate);
	}
	
	/**
	 * @Title: getDateMillDiff @Description: 计算两个日期毫秒差 @author: zengXinChao @date: 2016年3月7日 上午10:06:18 @param start @param end @return @return Long @throws
	 */
	public static Long getDateMillDiff(Date start, Date end) {
		return end.getTime() - start.getTime();
	}
	
	/**
	 * @param before
	 * @param after
	 * @return int 相差的天数
	 * @author:lining
	 * @email:lining@xiangyu.cn
	 * @创建日期:2013-3-20 @功能说明：计算两个日期相差的天数，只考虑年月日，不考虑时分秒(如果加上时分秒，可能导致天数计算错误)
	 */
	public static int getDateDiff(Date before, Date after) {
		if (before == null || after == null)
			return 0;
		Calendar calendar1 = new GregorianCalendar();
		Calendar calendar2 = new GregorianCalendar();
		calendar1.setTime(before);
		calendar1.set(Calendar.HOUR_OF_DAY, 0);
		calendar1.set(Calendar.MINUTE, 0);
		calendar1.set(Calendar.SECOND, 0);
		calendar1.set(Calendar.MILLISECOND, 0);
		calendar2.setTime(after);
		calendar2.set(Calendar.HOUR_OF_DAY, 0);
		calendar2.set(Calendar.MINUTE, 0);
		calendar2.set(Calendar.SECOND, 0);
		calendar2.set(Calendar.MILLISECOND, 0);
		int diff = (int) ((calendar2.getTime().getTime() - calendar1.getTime().getTime()) / (24 * 60 * 60 * 1000));
		return diff;
	}
	
	/**
	 * @return
	 * @author:lining
	 * @email:lining@xiangyu.cn
	 * @创建日期:2013-3-20
	 * @功能说明：获取当前时间
	 */
	public static Timestamp getCurrentTimeStamp() {
		Timestamp timestamp = new Timestamp(System.currentTimeMillis());
		return timestamp;
	}
	
	/**
	 * @Description: Timestamp 2 String @author: Santy @date: 2015年4月28日 @param timestamp 时间戳 @param format 时间格式 @return @throws
	 */
	public static String timestamp2String(Timestamp timestamp, String format) {
		if (timestamp == null) {
			return "";
		}
		String f = null;
		if (format == null || "".equals(format)) {
			f = SUPPORTED_FORMATS[0];
		} else {
			f = format;
		}
		SimpleDateFormat sdf = new SimpleDateFormat(f);
		Date date = new Date(timestamp.getTime());
		String strDate = sdf.format(date);
		
		return strDate;
	}
	
	/**
	 * @param date
	 * @param count
	 * @author:abbott
	 * @email:rhgui@xiangyu.cn
	 * @创建日期:2013-3-28
	 * @功能说明：获得给定时间推后或向前count天的日期
	 */
	public static Date getDateForCount(Date date, int count) {
		Calendar calendar = new GregorianCalendar();
		calendar.setTime(date);
		calendar.add(Calendar.DATE, count);// 把日期往后增加一天.整数往后推,负数往前移动
		date = calendar.getTime();
		return date;
	}
	
	/**
	 * 功能描述：获得当前月推后或向前count个月的日期
	 * 
	 * @author : Teny_lu 刘鹰
	 * @E_Mail : liuying5590@163.com
	 * @CreatedTime : 2015年4月30日-上午11:01:47
	 * @param @param date
	 * @param @param count
	 * @param @return
	 * @return
	 */
	public static Date getMonthForCount(Date date, int count) {
		Calendar calendar = new GregorianCalendar();
		calendar.setTime(date);
		calendar.add(Calendar.MONTH, count);// 把日期往后增加一天.整数往后推,负数往前移动
		date = calendar.getTime();
		return date;
	}
	
	/**
	 * 功能描述：获得指定时间推后或向前count年的年份
	 * 
	 * @author : Teny_lu 刘鹰
	 * @E_Mail : liuying5590@163.com
	 * @CreatedTime : 2015年4月25日-上午9:14:35
	 * @param @param date
	 * @param @param count
	 * @param @return
	 * @return
	 */
	public static String getYearForCount(Date date, int count) {
		Calendar calendar = new GregorianCalendar();
		calendar.setTime(date);
		calendar.add(Calendar.YEAR, count);// 把日期往后增加一天.整数往后推,负数往前移动
		date = calendar.getTime();
		String designDate = DateUtils.formatDate(date).substring(0, 4);
		return designDate;
	}
	
	/**
	 * 功能描述：获得指定时间推后或向前count天的日期
	 * 
	 * @author : Teny_lu 刘鹰
	 * @E_Mail : liuying5590@163.com
	 * @CreatedTime : 2015年4月24日-上午9:53:58
	 * @param date
	 * @param count
	 * @return
	 * @return
	 */
	public static String getDesignDateForCount(Date date, int count) {
		Calendar calendar = new GregorianCalendar();
		calendar.setTime(date);
		calendar.add(Calendar.DATE, count);// 把日期往后增加一天.整数往后推,负数往前移动
		date = calendar.getTime();
		String designDate = DateUtils.formatDate(date);
		return designDate;
	}
	
	/**
	 * 功能描述：获得当前月推后或向前count个月的日期
	 * 
	 * @author : Teny_lu 刘鹰
	 * @E_Mail : liuying5590@163.com
	 * @CreatedTime : 2015年4月30日-上午11:01:47
	 * @param @param date
	 * @param @param count
	 * @param @return
	 * @return
	 */
	public static String getDesignMonthForCount(Date date, int count) {
		Calendar calendar = new GregorianCalendar();
		calendar.setTime(date);
		calendar.add(Calendar.MONTH, count);// 把日期往后增加一月.整数往后推,负数往前移动
		date = calendar.getTime();
		String designDate = DateUtils.formatDate(date);
		return designDate;
	}
	
	/**
	 * 功能描述：获得当前年推后或向前count个年的日期
	 * 
	 * @author : Teny_lu 刘鹰
	 * @E_Mail : liuying5590@163.com
	 * @CreatedTime : 2015年4月30日-上午11:01:47
	 * @param @param date
	 * @param @param count
	 * @param @return
	 * @return
	 */
	public static String getDesignYearForCount(Date date, int count) {
		Calendar calendar = new GregorianCalendar();
		calendar.setTime(date);
		calendar.add(Calendar.YEAR, count);// 把日期往后增加一年.整数往后推,负数往前移动
		date = calendar.getTime();
		String designDate = DateUtils.formatDate(date);
		return designDate;
	}
	
	/**
	 * 获得下周星期一的日期
	 */
	public static Date getFirstMonday(Date date) {
		Calendar cd = Calendar.getInstance();
		cd.setTime(date);
		int mondayPlus = 0;
		// 获得今天是一周的第几天，星期日是第一天，星期二是第二天......
		int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK);
		if (dayOfWeek == 1) {
			mondayPlus = -6;
		} else {
			mondayPlus = 2 - dayOfWeek;
		}
		cd.add(GregorianCalendar.DATE, mondayPlus + 7 * 1);
		return cd.getTime();
	}
	
	/**
	 * 获得下周星期六的日期
	 */
	public static Date getFirstSaturday(Date date) {
		Calendar cd = Calendar.getInstance();
		cd.setTime(date);
		int mondayPlus = 0;
		// 获得今天是一周的第几天，星期日是第一天，星期二是第二天......
		int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK);
		if (dayOfWeek == 7) {
			mondayPlus = 7;
		} else {
			mondayPlus = 7 - dayOfWeek;
		}
		cd.add(GregorianCalendar.DATE, mondayPlus);
		return cd.getTime();
	}
	
	/**
	 * 判断指定时间是否是周末
	 * 
	 * @param date
	 *            指定的时间
	 * @return true:是周末,false:非周末
	 */
	public static boolean isWeekend(Date date) {
		boolean isWeekend = false;
		isWeekend = (getWeek(date) - 1 == 0 || getWeek(date) - 1 == 6);
		return isWeekend;
	}
	
	/**
	 * 求出指定时间那天是星期几
	 * 
	 * @param date
	 *            指定的时间
	 * @return 1-7
	 */
	public static int getWeek(Date date) {
		int week = 0;
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		week = cal.get(Calendar.DAY_OF_WEEK);
		return week;
	}
	
	public static int getDateHours() {
		Calendar cal = Calendar.getInstance();
		return cal.get(Calendar.HOUR_OF_DAY);
	}
	
	/**
	 * 获取指定日期的开始时间
	 * 
	 * @param date
	 * @return
	 */
	public static Date getDateBeginTime(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		return cal.getTime();
	}
	
	/**
	 * 功能描述：获取每周星期一的年月日
	 * 
	 * @author : Teny_lu 刘鹰
	 * @E_Mail : liuying5590@163.com
	 * @CreatedTime : 2014年12月8日-上午11:35:40
	 * @return
	 */
	public static String getMondayByCurrWeek() {
		Calendar cal = Calendar.getInstance();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); // 获取本周一的日期
		return sdf.format(cal.getTime());
	}
	
	/**
	 * 功能描述：获取本月第一天的年月日
	 * 
	 * @author : Teny_lu 刘鹰
	 * @E_Mail : liuying5590@163.com
	 * @CreatedTime : 2014年12月8日-上午11:35:40
	 * @return
	 */
	public static String getMondayByCurrMonth() {
		String nowTime = formatShortDate(new Date());
		String pinjieMonday = StringUtil.substring(nowTime, 0, 8);
		String firstMonday = pinjieMonday + "01";
		return firstMonday;
	}
	
	/**
	 * 功能描述：获取指定月第一天的年月日
	 * 
	 * @author : Teny_lu 刘鹰
	 * @E_Mail : liuying5590@163.com
	 * @CreatedTime : 2015年4月24日-上午9:57:48
	 * @return
	 * @return
	 */
	public static String getDesignFirstByCurrMonth(Date date) {
		String nowTime = formatShortDate(date);
		String pinjieMonday = StringUtil.substring(nowTime, 0, 8);
		String firstDay = pinjieMonday + "01";
		return firstDay;
	}
	
	/**
	 * 功能描述：获取指定月最后一天的年月日
	 * 
	 * @author : Teny_lu 刘鹰
	 * @E_Mail : liuying5590@163.com
	 * @CreatedTime : 2015年4月24日-上午9:57:48
	 * @return
	 * @return
	 */
	public static String getDesignLastByCurrMonth(Date date) {
		String nowTime = formatShortDate(date);
		String lastDay = StringUtil.substring(nowTime, 0, 10) + " 23:59:59";
		return lastDay;
	}
	
	/**
	 * 功能描述：获取格式为年月日的时间日期
	 * 
	 * @author : Teny_lu 刘鹰
	 * @param billDate
	 * @E_Mail : liuying5590@163.com
	 * @CreatedTime : 2015年3月16日-下午3:46:00
	 * @return
	 * @return
	 */
	public static String timeSub(String nowTime) {
		String year = StringUtil.substring(nowTime, 0, 4);
		String month = StringUtil.substring(nowTime, 5, 7);
		String day = StringUtil.substring(nowTime, 8, 10);
		String time = StringUtil.substring(nowTime, 11, 19);
		String text = year + "年" + month + "月" + day + "日 " + time;
		return text;
	}
	
	/**
	 * 功能描述：精确至年月日
	 * 
	 * @author : Teny_lu 刘鹰
	 * @E_Mail : liuying5590@163.com
	 * @CreatedTime : 2015年3月17日-上午9:39:23
	 * @param nowTime
	 * @return
	 * @return
	 */
	public static String timeSubtoDay(String nowTime) {
		if (StringUtil.isNotBlank(nowTime)) {
			String year = StringUtil.substring(nowTime, 0, 4);
			String month = StringUtil.substring(nowTime, 5, 7);
			String day = StringUtil.substring(nowTime, 8, 10);
			String text = year + "年" + month + "月" + day + "日 ";
			return text;
		} else {
			return "";
		}
	}
	
	/**
	 * 功能描述：精确至年月
	 * 
	 * @author : Teny_lu 刘鹰
	 * @E_Mail : liuying5590@163.com
	 * @CreatedTime : 2015年3月19日-下午3:04:57
	 * @param nowTime
	 * @return
	 * @return
	 */
	public static String timeSubtoMonth(String nowTime) {
		String year = StringUtil.substring(nowTime, 0, 4);
		String month = StringUtil.substring(nowTime, 5, 7);
		String text = year + "年" + month + "月份";
		return text;
	}
	
	/**
	 * 功能描述：获取前两个月的第一天时间，商品成本计算时间使用
	 * 
	 * @author : Teny_lu 刘鹰
	 * @E_Mail : liuying5590@163.com
	 * @CreatedTime : 2015年4月24日-上午10:33:06
	 * @param @return
	 * @return
	 */
	public static String getLastTwoMonthFirstDay() {
		Calendar cal = Calendar.getInstance();
		Date date = new Date();
		cal.setTime(date);
		int year = 0;
		int month = cal.get(Calendar.MONTH) - 1; // 前两个月月份
		if (month <= 0) {
			year = cal.get(Calendar.YEAR) - 1;
			month = 12;
		} else {
			year = cal.get(Calendar.YEAR);
		}
		String mon = "";
		if (month < 10) {
			mon = "0" + String.valueOf(month);
		} else {
			mon = String.valueOf(month);
		}
		String endDay = year + "-" + mon + "-01";
		return endDay;
	}
	
	/**
	 * 获取指定月份的第一天 @author: Santy @date: 2015年4月3日 @param month 月份 @param format 日期时间格式 @return @throws
	 */
	public static String getFirstDayByMonth(int month, String format) throws Exception {
		if (month > 12 || month < 1) {
			throw new Exception("输入的月份有误（month： 1~12）");
		}
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.MONTH, (month - 1));
		cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
		return sdf.format(cal.getTime());
	}
	
	/**
	 * 获取指定月份的最后一天 @author: Santy @date: 2015年4月3日 @param month 月份 @param format 日期时间格式 @return @throws
	 */
	public static String getLastDayByMonth(int month, String format) throws Exception {
		if (month > 12 || month < 1) {
			throw new Exception("输入的月份有误（month： 1~12）");
		}
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.MONTH, (month - 1));
		cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); //
		return sdf.format(cal.getTime());
	}
	
	// /////////////////////////////////////////////////////////////
	// /////////////////////////////////////////////////////////////
	// /////////////////////////////////////////////////////////////
	/**
	 * @Description: 返回一个SimpleDateFormat， 默认的日期时间格式： yyyy-MM-dd HH:mm:ss
	 * @author: Santy
	 * @date: 2015年4月30日
	 * @return SimpleDateFormat
	 */
	public static SimpleDateFormat getSDateFormat() {
		return new SimpleDateFormat(DateUtils.DATE_TIME_FORMAT1);
	}
	
	/**
	 * @Description: 返回一个指定的日期时间格式的SimpleDateFormat， 当格式为null或者"" 时，则使用yyyy-MM-dd HH:mm:ss为默认的日期时间格式
	 * @author: Santy
	 * @date: 2015年4月30日
	 * @param format
	 *            日期时间格式
	 * @return SimpleDateFormat
	 */
	public static SimpleDateFormat getSDateFormat(String format) {
		if (format == null || "".equals(format)) {
			getSDateFormat();
		}
		return new SimpleDateFormat(format);
	}
	
	// ///////////////////////////////////////////////////////////////
	/**
	 * 获取当期日期时间，日期时间格式： yyyy-MM-dd HH:mm:ss
	 * 
	 * @author: Santy
	 * @date: 2015年5月10日
	 * @param
	 * @return
	 */
	public static String getCurrentDateTime() {
		return getSDateFormat(DATE_TIME_FORMAT1).format(new Date());
	}
	
	/**
	 * @Title: getDateStr
	 * @Description: 返回 yyyy-MM-dd HH:mm:ss
	 * @author: zengXinChao
	 * @date: 2016年8月2日 下午4:02:33
	 * @param date
	 * @return
	 * @return String
	 */
	public static String getDateStr(Date date) {
		return getSDateFormat(DATE_TIME_FORMAT1).format(date);
	}
	
	public static String getDate(Date date) {
		return getSDateFormat(DATE_FORMAT1).format(date);
	}
	
	/**
	 * 获取当期日期时间，日期时间格式： yyyy-MM-dd HH:mm:ss
	 * 
	 * @author: Santy
	 * @date: 2015年5月10日
	 * @param
	 * @return
	 */
	public static String getCurrentDateTimeWithFormat(String format) {
		if (format == null || "".equals(format)) {
			return getCurrentDateTime();
		} else {
			return getSDateFormat(format).format(new Date());
		}
	}
	
	// ///////////////////////////////////////////////////////////////
	/**
	 * 获取当前日期， 日期格式： yyyy-MM-dd
	 * 
	 * @author: Santy
	 * @date: 2015年5月10日
	 * @param
	 * @return
	 */
	public static String getCurrentDate() {
		return getSDateFormat(DATE_FORMAT1).format(new Date());
	}
	
	/**
	 * @author: zengxinchao
	 * @date: 2016年12月5日 上午9:17:03
	 * @return
	 * @Description: yyyy年MM月dd日 HH:mm:ss
	 */
	public static String getCurrentDate2() {
		SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
		return format.format(new Date());
	}
	
	/**
	 * @Title: getDateNo
	 * @Description:
	 * @author: zengXinChao
	 * @date: 2016年5月30日 下午4:41:49
	 * @return
	 * @return String
	 */
	public static String getDateNo() {
		return getSDateFormat(DATE_FORMAT6).format(new Date());
	}
	
	/**
	 * 获取当前日期，如果参数为空，那么使用默认的日期格式： yyyy-MM-dd
	 * 
	 * @author: Santy
	 * @date: 2015年5月10日
	 * @param format
	 *            日期格式
	 * @return
	 */
	public static String getCurrentDateWithFormat(String format) {
		if (format == null || "".equals(format)) {
			return getCurrentDate();
		} else {
			return getSDateFormat(format).format(new Date());
		}
	}
	
	// ///////////////////////////////////////////////////////////////
	/**
	 * 获取当前时间， 时间格式： HH:mm:ss
	 * 
	 * @author: Santy
	 * @date: 2015年6月9日
	 * @param
	 * @return
	 */
	public static String getCurrentTime() {
		return getSDateFormat(TIME_FORMAT1).format(new Date());
	}
	
	/**
	 * 获取当前时间， 默认时间格式： HH:mm:ss
	 * 
	 * @author: Santy
	 * @date: 2015年6月9日
	 * @param
	 * @return
	 */
	public static String getCurrentTimeWithFormat(String format) {
		if (format == null || "".equals(format)) {
			return getSDateFormat(TIME_FORMAT1).format(new Date());
		}
		return getSDateFormat(format).format(new Date());
	}
	
	// ///////////////////////////////////////////////////////////////
	/**
	 * 获取当前年
	 * 
	 * @author: Santy
	 * @date: 2015年9月8日
	 * @return
	 */
	public static String getCurrentYear() {
		return getSDateFormat(YEAR_FORMAT_YYYY).format(new Date());
	}
	
	// ///////////////////////////////////////////////////////////////
	/**
	 * 获取当前月
	 * 
	 * @author: Santy
	 * @date: 2015年9月8日
	 * @return
	 */
	public static String getCurrentMonth() {
		return getSDateFormat(Month_FORMAT_MM).format(new Date());
	}
	
	// ///////////////////////////////////////////////////////////////
	/**
	 * 获取当前日
	 * 
	 * @author: Santy
	 * @date: 2015年9月8日
	 * @return
	 */
	public static String getCurrentDay() {
		return getSDateFormat(Day_FORMAT_DD).format(new Date());
	}
	
	/**
	 * 获取指定时间与当前时间的时间差
	 * 
	 * @author: Santy
	 * @date: 2015年9月21日
	 * @param dataTime
	 *            小于当前时间
	 * @return
	 */
	public static String diffCurrent(String dateTime) {
		if (StringUtil.isBlank(dateTime)) {
			// 如果传入的时间为空的话， 那么重新赋值为的当前时间
			dateTime = getCurrentDateTime();
		}
		// 当前时间
		Date date1 = getDate(getCurrentDateTime(), DATE_TIME_FORMAT1);
		// 指定时间
		Date date2 = getDate(dateTime, DATE_TIME_FORMAT1);
		
		long l1 = date1.getTime();
		long l2 = date2.getTime();
		
		// 毫秒
		long tl = l1 - l2;
		
		//
		long minutes = tl / (1000 * 60);
		
		long hours = minutes / 60;
		
		long day = hours / 24;
		
		StringBuffer sBuffer = new StringBuffer();
		if (day > 0) {
			sBuffer.append(day).append("天");
		}
		if (hours > 0) {
			hours = hours % 24;
			sBuffer.append(hours).append("小时");
		}
		if (minutes > 0) {
			minutes = minutes % 60;
			sBuffer.append(minutes).append("分钟");
		} else if (minutes == 0l) {
			sBuffer.append("刚刚");
		}
		return sBuffer.toString();
	}
	
	/**
	 * 获取指定时间与当前时间的时间差
	 * 
	 * @author: Santy
	 * @date: 2015年9月21日
	 * @param dataTime
	 * @return
	 */
	public static String diffCurrentDate(String dateTime) {
		if (StringUtil.isBlank(dateTime)) {
			// 如果传入的时间为空的话， 那么重新赋值为的当前时间
			dateTime = getCurrentDateTime();
		}
		// 当前时间
		Date date1 = getDate(getCurrentDateTime(), DATE_TIME_FORMAT1);
		// 指定时间
		Date date2 = getDate(dateTime, DATE_TIME_FORMAT1);
		
		long l1 = date1.getTime();
		long l2 = date2.getTime();
		
		// 毫秒
		long tl = l2 - l1;
		StringBuffer sBuffer = new StringBuffer();
		if (tl <= 0) {
			sBuffer.append("已过期");
		} else {
			long second = tl / 1000;
			
			long minutes = second / 60;
			
			long hours = minutes / 60;
			
			long day = hours / 24;
			
			if (day > 0) {
				sBuffer.append(day).append("天");
			}
			if (hours > 0) {
				hours = hours % 24;
				sBuffer.append(hours).append("小时");
			}
			if (minutes > 0) {
				minutes = minutes % 60;
				sBuffer.append(minutes).append("分钟");
			} else if (minutes == 0l) {
				sBuffer.append(second).append("秒");
			}
		}
		
		return sBuffer.toString();
	}
	
	/**
	 * 获取指定时间与当前时间的秒数差
	 * 
	 * @author: Santy
	 * @date: 2015年9月21日
	 * @param dataTime
	 * @return
	 */
	public static Long diffCurrentsecond(String dateTime) {
		if (StringUtil.isBlank(dateTime)) {
			// 如果传入的时间为空的话， 那么重新赋值为的当前时间
			dateTime = getCurrentDateTime();
		}
		// 当前时间
		Date date1 = getDate(getCurrentDateTime(), DATE_TIME_FORMAT1);
		// 指定时间
		Date date2 = getDate(dateTime, DATE_TIME_FORMAT1);
		
		long l1 = date1.getTime();
		long l2 = date2.getTime();
		// 毫秒
		long tl = l2 - l1;
		return tl / 1000;
	}
	
	// ///////////////////////////////////////////////////////////////
	// ///////////////////////////////////////////////////////////////
	// ///////////////////////////////////////////////////////////////
	/**
	 * @Description:获取该月的第一天时间
	 * @author :陈亚强
	 * @param date
	 * @return
	 * @date 2015年5月19日 上午10:31:39
	 */
	public static String getThisMonthFirstDay(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		// 第一天
		SimpleDateFormat df = getSDateFormat(DateUtils.DATE_FORMAT1);
		cal.add(Calendar.MONTH, 0);
		cal.set(Calendar.DAY_OF_MONTH, 1);
		String day_first = df.format(cal.getTime());
		StringBuffer str = new StringBuffer().append(day_first);
		day_first = str.toString();
		return day_first;
	}
	
	/**
	 * 获取该月的第一天 的0点0分
	 * 
	 * @Title: getThisMonthFirstTime
	 * @author joy.zhang
	 * @date 2016年5月18日 下午6:05:22
	 * @param date
	 * @return
	 * @return String
	 */
	public static String getThisMonthFirstTime(Date date) {
		return getThisMonthFirstDay(date) + BEGIN_TIME;
	}
	
	/**
	 * @Description:获取该月的最后一天时间
	 * @author :陈亚强
	 * @param date
	 * @return
	 * @date 2015年5月19日 上午10:32:39
	 */
	public static String getThisMonthLastDay(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		SimpleDateFormat df = getSDateFormat(DateUtils.DATE_FORMAT1);
		cal.add(Calendar.MONTH, 1); // 加一个月
		cal.set(Calendar.DATE, 1); // 设置为该月第一天
		cal.add(Calendar.DATE, -1); // 再减一天即为上个月最后一天
		String day_last = df.format(cal.getTime());
		StringBuffer endStr = new StringBuffer().append(day_last).append(END_TIME);
		day_last = endStr.toString();
		return day_last;
	}
	
	/**
	 * 获取该月的最后一天
	 * 
	 * @Title: getMonthLastDay
	 * @author joy.zhang
	 * @date 2016年6月21日 下午6:20:24
	 * @param date
	 * @return
	 * @return String
	 */
	public static String getMonthLastDay(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		SimpleDateFormat df = getSDateFormat(DateUtils.DATE_FORMAT1);
		cal.add(Calendar.MONTH, 1); // 加一个月
		cal.set(Calendar.DATE, 1); // 设置为该月第一天
		cal.add(Calendar.DATE, -1); // 再减一天即为上个月最后一天
		String day_last = df.format(cal.getTime());
		return day_last;
	}
	
	/**
	 * @Description: 取到当前日期为一个月的日期
	 * @param date
	 *            当前日期
	 * @param many
	 *            加减月份数
	 * @return Date
	 */
	public static String getDateBeforeMonth(Date date, int many) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		SimpleDateFormat df = getSDateFormat(DateUtils.DATE_FORMAT1);
		cal.add(Calendar.MONTH, many); // 加减月份数
		date = cal.getTime();
		return df.format(date);
	}
	
	/**
	 * @Description: 取到当前日期many天的日期  (-前  +为后)
	 * @author :蓝鑫林
	 * @param date
	 *            当前日期 many 几天
	 * @return
	 * @date 2015年9月15日 上午10:01:08
	 */
	public static Date getDateManyDays(Date date, int many) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		// SimpleDateFormat df = getSDateFormat(DateUtils.DATE_FORMAT1);
		cal.add(Calendar.DATE, many);
		return cal.getTime();
	}
	
	/**
	 * @Description: 取到当前日期前many天的日期
	 * @author :蓝鑫林
	 * @param date
	 *            当前日期 many 几天
	 * @return
	 * @date 2015年9月15日 上午10:01:08
	 */
	public static Date getDateBeforeManyDays(Date date, int many) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		// SimpleDateFormat df = getSDateFormat(DateUtils.DATE_FORMAT1);
		cal.add(Calendar.DATE, -1 * many);
		return cal.getTime();
	}
	
	/**
	 * @Description:获取yyyy-MM格式的
	 * @author :陈亚强
	 * @param date
	 * @return
	 * @date 2015年5月19日 上午10:51:21
	 */
	public static String getMonthStr(Date date, int count) throws Exception {
		Calendar cal = Calendar.getInstance();
		SimpleDateFormat sdf = getSDateFormat(DateUtils.DATE_FORMAT4);
		cal.setTime(date);
		cal.add(Calendar.MONTH, count);
		date = cal.getTime();
		return sdf.format(date);
	}
	
	/**
	 * 功能描述：截取当前完整的时间
	 * 
	 * @author : Teny_lu 刘鹰
	 * @E_Mail : liuying5590@163.com
	 * @CreatedTime : 2015年5月26日-下午3:54:42
	 * @return
	 */
	public static String getStringTime(Date purchaseInStockDate) {
		String mills = DateUtils.formatDate(new Date()).substring(11, 19);
		String time = DateUtils.formatDate(purchaseInStockDate).substring(0, 11);
		String purTime = time + mills;
		return purTime;
	}
	
	public static String getStringTime(String purchaseOrderDate) {
		String mills = DateUtils.formatDate(new Date()).substring(11, 19);
		String time = purchaseOrderDate.substring(0, 11);
		String purTime = time + mills;
		return purTime;
	}
	
	/**
	 * @Description:
	 * @author :蓝鑫林
	 * @return
	 * @date 2016年1月15日 上午11:07:46
	 * @修改内容：方法重构
	 * @修改人 : cjj 陈俊杰
	 * @修改时间 : 2016年3月28日上午11:02:45
	 * @return
	 */
	public static Map<String, String> getDateStr() {
		Map<String, String> mapDate = new HashMap<String, String>();
		// String year = DateUtils.format(DateUtils.getDate(), "yyyy");
		// String month = DateUtils.format(DateUtils.getDate(), "MM");
		// // String year = "2015";
		// // String month = "11";
		// String endTime = year + "-" + month + "-" + "01";
		// Integer month1 = null;
		// Integer year1 = null;
		// if ("01".equals(month)) {
		// month1 = 12;
		// year1 = Integer.parseInt(year.trim());
		// year1 = year1 - 1;
		// } else {
		// month1 = Integer.parseInt(month.trim());
		// month1 = month1 - 1;
		// year1 = Integer.parseInt(year.trim());
		// }
		//
		// String beginTime = year1 + "-" + month1 + "-" + "01";
		// 获取前月的第一天
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		Calendar calendar = Calendar.getInstance();// 获取当前日期
		calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
		String endTime = format.format(calendar.getTime());
		calendar.add(Calendar.MONTH, -1);
		calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
		String beginTime = format.format(calendar.getTime());
		mapDate.put("beginTime", beginTime);
		mapDate.put("endTime", endTime);
		return mapDate;
	}
	
	/**
	 * @Description:获取账单截止日期
	 * @author :吴艺城
	 * @return
	 * @date 2016年4月25日 上午9:07:46
	 */
	public static Map<String, String> getDateStr(int month) {
		Map<String, String> mapDate = new HashMap<String, String>();
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Calendar calendar = Calendar.getInstance();// 获取当前日期
		calendar.add(Calendar.MONTH, -month);
		calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
		String settleTime = format.format(calendar.getTime());
		mapDate.put("settleTime", settleTime);
		return mapDate;
	}
	
	/**
	 * @Description:账期转换成数字
	 * @author :吴艺城
	 * @return
	 * @date 2016年4月25日 上午9:07:46
	 */
	// public static int getSettleMonth(String settlementInterval) {
	// if(settlementInterval.equals(SettlementInterval.一个月)){
	// return SettlementInterval.一个月.getIndex();
	// }
	// if(settlementInterval.equals(SettlementInterval.二个月)){
	// return SettlementInterval.二个月.getIndex();
	// }
	// if(settlementInterval.equals(SettlementInterval.三个月)){
	// return SettlementInterval.三个月.getIndex();
	// }
	// if(settlementInterval.equals(SettlementInterval.四个月)){
	// return SettlementInterval.四个月.getIndex();
	// }
	// if(settlementInterval.equals(SettlementInterval.五个月)){
	// return SettlementInterval.五个月.getIndex();
	// }
	// if(settlementInterval.equals(SettlementInterval.六个月)){
	// return SettlementInterval.六个月.getIndex();
	// }
	// if(settlementInterval.equals(SettlementInterval.七个月)){
	// return SettlementInterval.七个月.getIndex();
	// }
	// if(settlementInterval.equals(SettlementInterval.八个月)){
	// return SettlementInterval.八个月.getIndex();
	// }
	// if(settlementInterval.equals(SettlementInterval.九个月)){
	// return SettlementInterval.九个月.getIndex();
	// }
	// if(settlementInterval.equals(SettlementInterval.十个月)){
	// return SettlementInterval.十个月.getIndex();
	// }
	// if(settlementInterval.equals(SettlementInterval.十一个月)){
	// return SettlementInterval.十一个月.getIndex();
	// }
	// if(settlementInterval.equals(SettlementInterval.十二个月)){
	// return SettlementInterval.十二个月.getIndex();
	// }
	// return 1;
	// }
	
	/**
	 * 
	 */
	public static String changeMonth(String dateStr) {
		String[] str = dateStr.split("-");
		String result = null;
		Integer month = null;
		if (str.length > 1) {
			result = str[1];
			result = result.substring(str.length - 2, str.length - 1);
			if (result.length() > 0) {
				month = Integer.parseInt(result);
			}
			if (month != null) {
				if (month != 1) {
					month = month - 1;
				} else {
					month = 12;
				}
			}
		}
		result = String.valueOf(month);
		return result;
	}
	
	/**
	 * @Title: getDaysBefore
	 * @Description: TODO
	 * @author: zengXinChao
	 * @date: 2016年5月10日 上午9:23:59
	 * @param days
	 * @return
	 * @return String
	 */
	public static String getDaysBefore(int days) {
		Date daysBefore = getDateBeforeManyDays(new Date(), days);
		return SHORT_DATE_FORMAT.format(daysBefore);
	}
	
	/**
	 * @Title: getFullDayStrBefore
	 * @Description: TODO
	 * @author: zengXinChao
	 * @date: 2016年6月2日 下午9:28:20
	 * @param days
	 * @return
	 * @return String
	 */
	public static String getFullDayStrBefore(int days) {
		Date daysBefore = getDateBeforeManyDays(new Date(), days);
		return FULL_DATE_FORMAT.format(daysBefore);
	}
	
	/**
	 * @函数名: getAfterManyDays
	 * @功能描述: 获取几天日期
	 * @作者 : wuyicheng
	 * @创建时间 : 2016年7月18日下午2:40:30
	 * @return String
	 */
	public static String getAfterManyDays(int many) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(new Date());
		cal.add(Calendar.DATE, 1 * many);
		return FULL_DATE_FORMAT.format(cal.getTime());
	}
	
	/**
	 * @函数名: getAfterManyminutes
	 * @功能描述: TODO
	 * @作者 : wuyicheng
	 * @创建时间 : 2016年9月2日上午11:11:49
	 * @return String
	 */
	public static String getAfterManyMinutes(int many) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(new Date());
		cal.add(Calendar.MINUTE, 1 * many);
		return FULL_DATE_FORMAT.format(cal.getTime());
	}
	
	/**
	 * @函数名: getAfterManyminutes
	 * @功能描述: TODO
	 * @作者 : wuyicheng
	 * @创建时间 : 2016年9月2日上午11:11:49
	 * @return String
	 */
	public static String getDateAddMinutes(String time, int many) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = null;
		try {
			date = sdf.parse(time);
		} catch (ParseException e) {
			
			e.printStackTrace();
		}
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.MINUTE, 1 * many);
		return FULL_DATE_FORMAT.format(cal.getTime());
	}
	
	/**
	 * 
	 * 获取多少天后的时候（前- 后+）
	 *
	 * @Title: getAfterDays 
	 * @author: wuyicheng
	 * @date: 2017年7月11日下午4:08:28 
	 * @param currentTime 当前时间
	 * @param many（前- 后+）
	 * @return
	 * @return: String
	 * @throws ParseException 
	 * @throws
	 */
	public static String getAfterDays(String currentTime, int many) throws ParseException {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = sdf.parse(currentTime);
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.DATE, 1 * many);
		return FULL_DATE_FORMAT.format(cal.getTime());
	}
	
	/*public static void main(String[] args) throws ParseException {
		String dString="2016-12-22 00:00:00";
		String string=getAfterDays(dString, 7);
		System.out.println(string);
	}*/
	
	/**
	 * @Title: getTimeDiffByStr @author wuyicheng @date 2016年10月31日上午9:36:39 @Description: 计算两个时间差 @param start @param end @return Long @throws
	 */
	public static Long getTimeDiffByStr(String start, String end) {
		Date d1;
		Date d2;
		Long getTimeSpent = 0L;
		try {
			d1 = DateUtils.parseShortTime(start);
			d2 = DateUtils.parseShortTime(end);
			getTimeSpent = DateUtils.getDateMillDiff(d1, d2);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return getTimeSpent;
	}
	
	/**
	 * @Description:获取时间戳 每天晚上凌晨
	 * @Title:
	 * @author: xujinding
	 * @date: 2017年3月28日下午7:32:26
	 */
	public static Long getTodayTime() throws ParseException {
		
		return FULL_DATE_FORMAT.parse(DateUtils.getCurrentDate() + END_TIME).getTime();
		
	}
	
}
